#!/usr/bin/env lua
local config_dir="/usr/milis/mps/conf/"
package.path  = "/usr/milis/mps/lua/?.lua" .. ";".. package.path
package.path  = config_dir.."?.lua" .. ";".. package.path

local c = require ("conf")
local serpent = require('serpent')

--local config_file="/usr/milis/mps/conf/conf.lua"
local config_file=config_dir.."conf.lua"

local key=arg[1]
local val=arg[2]
local val2=arg[3]

-- yedekleme için ayarlar
local mpsconf={
	repo_dizin="/sources",
	sunucu={"https://mls.akdeniz.edu.tr/paketler21",},
	talimatdepo={
		 [1]={["https://mls.akdeniz.edu.tr/git/milislinux/milis21"]="talimatname/1"},
		 [2]={["https://mls.akdeniz.edu.tr/git/milislinux/milis21"]="talimatname/2"},
	},
	betikdepo={
		bin={["https://mls.akdeniz.edu.tr/git/milislinux/milis21"]="bin"},
		ayarlar={["https://mls.akdeniz.edu.tr/git/milislinux/milis21"]="ayarlar"},
	},
}

-- parametre işlevleri
handle={
	["-y"]=function() c=mpsconf end,
	["-h"]=function() 
		local help=[[
------------------------------------
mpsc - MPS için Ayar Düzenleme Betiği 
------------------------------------
mpsc                              Mevcut ayarlar
mpsc -h                           Yardım menüsü
mpsc -y                           Ayarları sıfırlama
mpsc -r repo_dizin                Kaynak dizini ayarlama
mpsc -s sıra=sunucu_adres         Paket sunucusunu ayarlama
mpsc -t sıra sunucu_adres=dizin   Talimatname seviyesi için talimat deposu ayarlama  
mpsc -b dizin sunucu_adres=dizin  Betik/uygulama için git deposu ayarlama  
------------------------------------
		]]
		print(help)
	end,
	["-r"]=function(val,val2) c.repo_dizin=val end,
	["-s"]=function(val,val2) 
		local poz=val:find("=",1,true)
		if poz == nil then
			--print("1=sunucu_adresi şeklinde değer veriniz.")
			c.sunucu[1]=val
		else
			local order=val:sub(1,poz-1)
			order=tonumber(order)
			local server=val:sub(poz+1,-1)
			if server == "" then
				c.sunucu[order]=nil
			else
				c.sunucu[order]=server
			end
		end
	end,
	["-b"]=function(val,val2) 
		if val2 == nil then
			print("depo_dizin depo_adres=depo_dizin şeklinde değer veriniz.")
		else
			if c.betikdepo[val] == nil then
				c.betikdepo[val]={}
			end
			-- betik depo boş değilse
			if val2 ~= "nil" then
				local mpoz=val2:find("@",1,true)
				if mpoz ~= nil then
					val2="https://mls.akdeniz.edu.tr/git/milislinux/"..val2:sub(mpoz+1,-1)
				end
				local poz=val2:find("=",1,true)
				if poz == nil then
					--print("depo_dizin depo_adres=depo_dizin şeklinde değer veriniz.")
					c.betikdepo[val][val2]=""
				else
					local url=val2:sub(1,poz-1)
					local dir=val2:sub(poz+1,-1)
					if dir == "nil" then 
						c.betikdepo[val][url]=nil
					else
						c.betikdepo[val][url]=dir
					end
				end
			else
				-- betikdepo silmek için
				c.betikdepo[val]=nil
			end
		end
	end,
	["-t"]=function(val,val2) 
		if val2 == nil then
			print("depo_numara depo_adres=depo_dizin şeklinde değer veriniz.")
		else
			-- ilk defa eklenecek seviye kontrolü
			if c.talimatdepo[val] == nil then
				c.talimatdepo[val]={}
			end
			-- talimat depo boş değilse
			if val2 ~= "nil" then
				local poz=val2:find("=",1,true)
				val=tonumber(val)
				
				if poz == nil then
					--print("depo_numara depo_adres=depo_dizin şeklinde değer veriniz.")
					c.talimatdepo[val][val2]=""
				else
					local url=val2:sub(1,poz-1)
					local dir=val2:sub(poz+1,-1)
					if dir == "nil" then 
						c.talimatdepo[val][url]=nil
					else
						c.talimatdepo[val][url]=dir
					end
				end
			else
			-- seviye silmek için
				table.remove(c.talimatdepo, val)
			end
		end
	end,
}

if key~= nil then
	if val~= nil then
		handle[key](val,val2)
	else
		handle[key]()
	end
else
	print(serpent.block(c))
	--handle["-h"]()
end

local indent=""

function tprint(tablo)
	local data=serpent.block(tablo)
	-- açık çıktıyı kullan
	io.output(io.open(config_file, "w"))
    io.write("local config=")
    io.write(data)
    io.write("\n")
    io.write("return config")
    io.write("\n")  
    io.close()
end

tprint(c)
